#ifndef _QUEUE_H
#define _QUEUE_H

/*
 * 数据的一端为 "队尾"，出数据的一端为 "队头"，
 * 数据元素进队列的过程称为 "入队"，出队列的过程称为 "出队"
 * 先进先出
 * 循环队列：少用一个元素，判断是空队列还是满队列
 * 比如队列大小是100，则最多放99个元素
 * */

#define QUEUE_SIZE 100

typedef char SELemType;

struct queue{
	int front;
	int rear;
	unsigned int len;
};

extern void initQueue(struct queue* q, unsigned int maxLen);
extern void destroyQueue(struct queue* q);

//return rear index
//add data to queue
extern int enQueue(SELemType *ary, struct queue* q, SELemType data);

//return front index
extern SELemType deQueue(SELemType *ary, struct queue* q);

//if queue is empty
extern int queueEmpty(struct queue* q);

extern unsigned int queueLength(struct queue* q);

extern SELemType getQueueHead(struct queue* q);


#endif
